GFA-AMIGAB COPYBUFFER SL_SPR SLOT1 DATEI YM UEBERGABE SPIEGEL S_ZEILE S_TAUSCH BERGABE LOESCH AUSSCHNITT ANI_SPR EDIT_SPR SPR_ZEILE AUSY1 ROT_POS GRUEN_POS BLAU_POS AKTIVE Z_START FARBEX ZEILE ACTIVE N_POS INITDIM BILDAUF EDITOR_MASKE HAUPT_VERZWEIGUNG BILDZU ZEIG_FARBBOXWAHL SLIDERSETZEN EDIT_RASTER ROLL_L SLOT_INC AUSS_RAUF_RUNTER WAHL_SLOT_SETZEN ROLL_R SLOT_DEC FARB_ED MENU_LINKS MENU_RECHTS CLEAR_SPRITE DISK ANIMATION SPRITE_COPY MIRROR BLOCK_SETZEN SPIEGELN SPRITE_IN_RASTER NACHRICHT_LOESCHEN SLOT_TASTE_LESEN AKTUELLEFARBE AUSSCHNITT_BOX NACHRICHT_L SCHEN COLOR Dummy zur Garbage Collection Spriteeditor V1.8 vom 20.02.89 von Thomas Knab r das Buch-Kapitel SpriteED und Programmoptimierung des Buches "GFA-Basic V3.0 Programmierung auf AMIGA" Incl. Copy, Spiegel, Auf- Abw rts-Ausschnitten, Rechts-Links-Rollen, 4 Farben, und 26-Bilder-Animation. Spritegr sse: 16x32 Pixel Bit-Scan Routinen optimiert von Frank Ostrowski 15.02.89 Das Kopf- und Hauptprogramm: Initialisierung Ende und Hauptschleife: Ende des Programms und Speicherfreigabe: Routinen: Initialisierung von Arrays, Screen/Window auf- bzw. zumachen und Editor-Maske malen Komplette Sprite Animation - 26 Slots Je eine Spritezeile als String und als Langwortvariable Blitter-Farbbl cke f r GET und PUT: 3 User Farben Alle Spritefelder mit Null f llen (sonst "SPRITEFEHLER") 8-Farben-Screen Titel als Normalschrift (nicht Revers!) Fullwindow mit Activate Anfangsfarben werden gesetzt Slider & Malfarbe setzen &SpriteED:GFA-Basic V3.0 ProgrammierungF Hier folgen die Quadrate f r die verschiedenen Farben im Malraster Ausschnittsbox begrenzen Malfarbe f r Bildmaske setzen Das Malraster wird erstellt mit 16 Zeilen, 16 Spalten Das Transparent-BOB Spritebox zur Darstellung Sprite:Fu Up-Down Scrollbox AusschnittsF Startzeile:F Aktives Animations-Sprite & Darstellungsposition AnimateFt Slot NrFt Rollboxen rechts und links L-Rollen-RF Aktive Slot-Nummer f r Animation (Wahl) Dreieck f r plus Texte f r aktiven Slot Slot F Dreieck f r minus Die Farb-Sliderboxen FarbeinstellungFo 3 Slider Boxen: Rot,Gr n,Blau als Grundfarben Aktuelle Farbwahl-Boxen Farben:F Auswahlmen CLEARF COPYF LOADF SAVEF ANIMATEF SPIEGELF EXIT Box EXITF USER-Nachrichten-Box Slider-Sprites setzen (Schieber) Farbauswahl-Boxen setzen (Schwarz) Anfangswert f r Selektion setzen Hauptverzweigung abh ngig von Mausposition berhaupt eine Maustaste gedr ckt ? x-Position y-Position nach y-Ausw hlen (1.Ast) Diese 4 Proceduren haben direkte Aufgaben: nach x-Ausw hlen (1.Ast) Direkt verzweigen Ebenfalls direkt verzweigen Direkt verzweigen Nach Ausschnitt verzweigen Slot-Nummer direkt abfragen Direkt verzweigen Direkt verzweigen chste x-orientierte Auswahl (Bildschirmh lfte) Diese Prozedur wird ebenfalls direkt angesprungen: Diese zwei Proceduren verzweigen weiter: EXIT-BOX gedr ckt ? => Sicherheitsabfrage Sprite ED Verlassen ?! JA,RAUS|ZURUECK! Weiterverzweigende Proceduren Ebenfalls hier die schnelle SELECT-Abfrage Clear ausgew hlt und anspringen Load gew hlt und ebenfalls verzweigen ! Flag, ob laden oder saven Animate Selected und dorthin verzweigen Copy Sprite ausgew Speichern Sprites gew Spiegeln Sprite Eigentliche Hauptroutinen Direkte Proceduren Zeile ermitteln Mausposition-10 = Anfang des Rasters Division durch 8 (Raster-Abstand) ist gleich dem 'Bit-Shift-Rechts' 3 mal (2 hoch 3 = 8) Spalte ermitteln (genauso wie oben) Aktuellen Colorblock im Raster setzen Werte dem Sprite-Slot bergeben abh ngig von aktiver Farbe Transparent ? dann alle Bits dieser Position l schen! Jetzt sind die neuen Daten bereit zur bergabe Es werden nur die ver nderten Daten eingef Spritefarbe setzen (nur Sprite #6): In dieser Routine bleiben, solange der Mausknopf gedr ckt ist Farbeinstellung mit 3 interaktiven Slidern Im Slider ROT ? Vor der alten Position Der oben erw hnte Achter-Schritt Farbwert erh Neue Sliderposition setzen hinter der alten Position Farbwert erniedrigen Neue Sliderposition Wie oben f Und ebenfalls f r Blau Im Bereich der Farbboxwahl ? Farbboxwahl - Radio-Buttons Hintergrundfarbe Alten Rahmen l schen ! L schflag setzen Farbe 1 Farbnummer setzen f r alle Routinen ! L schflag sicherheitshalber l schen Farbe 2 Farbnummer setzen Und Farbe 3 Nun die aktuelle Farbe in Boxwahl & Sprite aktualisieren Keine Farbe setzen oder die Maustaste wurde losgelassen = Exit Letzter Slot erreicht ? Aktive Farbe retten Slot hochz Alte Nummer im Kasten l schen Neue dort schreiben Sprite darstellen und ins Malraster bertragen Gerettete Farbe zur ckschreiben Nullter Slot erreicht ? Slot runterz "Slot # bitte ZWEISTELLIG eingeben F Test auf Wertgrenze !Slot # nicht gr sser als 2x ! Fb und zwischenspeichern Einerstelle dazuaddieren !Slot # nicht gr sser als 25 ! Fb Angew hlten Slot ausgeben Zum aktuellen Slot machen Im Sprite und im Malraster darstellen Sprite zum Bearbeiten holen... ROR die einzelnen Worte (wegen Farben) aufgeteilt in obere + untere 16 Bits CARD wegen der Besonderheit des ROR& (Kopiert Bit 15 in Bits 16 bis 31!) Oberes Wort + Unteres Wort Und in den aktuellen Sprite kopieren: Darstellen und ins Raster: ROL wird genauso behandelt wie ROR (siehe dort...) Unter-Prozeduren aus menu_rechts und menu_links Da die Sprites eventuell im FILESELECT-Requester stehen k nnen werden sie unten rechts versteckt: Jetzt wird das dk!-Flag getestet, ob geladen oder gespeichert werden soll: Die DO-LOOP Schleife ist nur f r das EXIT IF TRUE, damit bei FILESELECT-Abbruch sowie bei Irrtum-Wahl abgebrochen werden kann Sprite Laden (.SPR)! Laden! KEINE SPRITE DATEI!F Raus bei Irrtum Farbtabelle laden Radio-Button setzen Farb-Slider f r aktive Farbe richtig setzen (versteckte Sprites wieder auf die richtige Position bringen Slider auf Farbe0 setzen Sprite-Daten laden Den nullten Sprite aktivieren und ins Spritefenster setzen sowie die neue Slot-Nummer bekanntgeben Versteckte Sprites wieder richtig positionieren: Und im Malraster den aktuellen Ausschnitt darstellen Nachricht schicken, da alles ok und fertig ist Geladen wurde Auf jeden Fall raus FF" Speicher-Flag? Sprite Speichern! Speichern! SPRITES NICHT GESPEICHERT !Fe .SPRFN .SPRF Farben Speichern mit Extension 'SPRC' Sprite-Sequenz als gesamtes Speichern OK Nachricht ausgeben: Gespeichert in Jetzt werden alle versteckten Sprites wieder auf die richtige Position gesetzt: Auf jeden Fall rauskommen... Soll ein SPrite aus oder in den Buffer kopiert werden ? "COPY SPRITE (IN) ODER (AUS) BUFFERF Um eine Reaktion erwarten zu k nnen, eine Pause: und warten auf Mausklick: Dann verzweige erst auf, in oder aus: "SPRITE # IM BUFFER ! F OK, dann kopiere aktuellen Sprite in Buffer: Und teile es dem Benutzer mit: Kopiere Buffer in den aktuellen Sprite "BUFFER NACH SPRITE # KOPIERT F Und stelle es im Malraster dar: Abbruch durch RECHTE Maustaste oder durch falsches Anklicken: COPY ABGEBROCHEN!F flag! RESET: 15 Zeilen und 15 Spalten des Malrasters werden gel scht: Jetzt wird die Spritezeile gel scht und auf Null gesetzt Beide W rter, darum: Und die Sprites: Aktuellen Slot mit Nullen berschreiben und l schen: Dargestellten Sprite aktualisieren: als gel schten (transparenten) Sprite darstellen Hier wird die Obergrenze festgelegt: Pause, damit der Benutzer den Wechsel verfolgen kann Momentane Sequenznummer schreiben: Und darstellen: Nach Animate aktuellen Slot wieder bereitstellen Aktiven Sprite-Slot in das Zeilen-Langwort-Array kopieren 32 Zeilen Spiegeln ... Der Spiegelroutine bergeben.. ... und in Sprite-Slot bergeben in den Sprite-Slot darstellen den aktuellen Sprite-Ausschnitt in der Malbox zeichnen Die Hilfs- und Unterroutinen Spiegel-Zwischen-Variable l schen: Aktuelle Spritezeile einer Hilfsvariablen bergeben Wenn Bit gesetzt ist, setze es in .. der Langwortvariablen spiegelverkehrt und diese Operation ebenfalls f r das obere Datenwort Und spiegel% enth lt die korrekten Spritezeilen-Daten, um damit weiterzuarbeiten Farbe oder l schen ? Wenn gel scht werden soll, setze durchsichtigen Block Ansonsten die aktuelle Farbe Vom Sprite-Slot$ nach 4Byte-Wert r berschieben Sprite steht f r die Bildwiedergabe jetzt in den Spritezeilen verkehrt Positionen der Bits und deren Farbwerte ermitteln Auch "scannen" genannt.. 16 Zeilen bei 16 Spalten sind 256 Positionen Rasterstartzeile Nur den aktuellen Spriteausschnitt darstellen: Rasterstartspalte r Bildschirm-Darstellung spiegeln Ist die zu bearbeitende Zeile leer (d.h. KEIN Bit gesetzt)? Oberes Spritewort in zweite Hilfsvariable bernehmen: Hier wird die aktuelle Farbe errechnet und gePUTet.. chste Rasterposition in der Zeile: Hier wird die Zeile mit der Hintergrundfarbe gef also im Sprite KEIN BIT gesetzt (transparent) chste Rasterzeile Aktuelle Farbe in angew hlte Box setzen ... SETCOLOR in Farbe 5,6, oder 7... Aktive, neu gesetzte Farbe aktivieren: Und Box mit neuer Farbe malen: Farbe f r alles andere wieder zur cksetzen Neue Farbe ebenfalls dem Sprite mitteilen (SPRITE #6): Fn Farbwert ermitteln (X= AND mit max. m glichen Farbwert) Zum relativen Byte-Wert umrechnen (x1=SHR x,(R:8,G:4,B:0)) dann Position anpassen in achter Schritten: x2=(x1*8)=(SHL x1,3) plus dem Slideranfang (+8) Die zusammengerechneten SHIFTungen ergeben f Rot:SHR(x2,5); Gr n:SHR(x2,1); Blau:SHL(x2,3) Zusammengefa t werden diese Programmzeilen daraus: Und die errechneten Slider-Positionen setzen Angew hlte Box einrahmen bzw. Rahmen l schen In dieser Schleife bleiben, bis die Maustaste losgelassen wurde Soll der Ausschnitt unter oder ber dem alten sein? Neuen Ausschnitt dem Malraster bergeben Alte Ausschnittbox l schen ber oder unter dem alten Ausschnitt Im Erlaubten Maximal-Wert-Bereich ? OK, dann Zeiger und Boxkoordinaten hochz Im erlaubten Minimal-Wert-Bereich ? OK, dann Boxkoordinaten runterz Dann neue Ausschnittbox malen